<?php

/**
 * @author Remi
 * @version 1.0
 * @see Utilisateur
 */
class ContactEntreprise extends Utilisateur
{

    /**
     * @var int
     */
    protected $IdEntreprise;
    /**
     * @var string
     */
    protected $Adresse1;
    /**
     * @var string
     */
    protected $Adresse2;
    /**
     * @var int
     */
    protected $CP;
    /**
     * @var string
     */
    protected $Ville;
    /**
     * @var string
     */
    protected $Fonction;
    /**
     * @var string
     */
    private $Phone;

    /**
     *
     * @param int $id
     */
    public function __construct($id = 0)
    {
        parent::__construct($id);
        $this->setIdStatutUtilisateur(2);
        if (isset($id) && !empty($id))
        {
            $sql = SQL::getInstance()->getConnection();

            $query = "	SELECT *
						FROM ContactEntreprise
					 	WHERE idContactEntreprise = :id
					";
            $c = $sql->prepare($query);
            $c->bindParam(":id", $id, PDO::PARAM_INT);

            if ($c->execute())
            {
                $result = $c->fetch(PDO::FETCH_OBJ);

                $this->IdEntreprise = $result->IdEntreprise;

                // TODO : ADDRESSE
                $this->Adresse1 = $result->Adresse1ContactEntreprise;
                $this->Adresse2 = $result->Adresse2ContactEntreprise;
                $this->CP = $result->CPContactEntreprise;
                $this->Ville = $result->VilleContactEntreprise;
                $this->Fonction = $result->FonctionContactEntreprise;
                $this->Phone = $result->TelephoneContactEntreprise;

                $this->IdEntreprise = $result->IdEntreprise;

                $this->errormsg = "contact recuperee";
                $this->requeteOk = true;
            }
            else
            {
                $this->IdEntreprise = 0;
                $this->Adresse1 = "";
                $this->Adresse2 = "";
                $this->CP = "";
                $this->Ville = "";
                $this->Fonction = "";

                $this->IdEntreprise = 0;

                $this->errormsg = "SQL Failed";
                $this->requeteOk = false;
            }
            $c->closeCursor();
        }
        else
        {
            $this->IdEntreprise = 0;
            $this->Adresse1 = "";
            $this->Adresse2 = "";
            $this->CP = "";
            $this->Ville = "";
            $this->Fonction = "";

            $this->IdEntrepise = 0;
        }
    }

    /**
     * Insert un ContactEntreprise dans la base
     */
    public function insert()
    {
        $IdUtilisateur = parent::insertUtilisateur();
        if (!empty($IdUtilisateur))
        {
            $sql = SQL::getInstance()->getConnection();
            $query = "INSERT INTO ContactEntreprise
					(
                                            idContactEntreprise,
                                            IdEntreprise,
                                            Adresse1ContactEntreprise,
                                            Adresse2ContactEntreprise,
                                            CPContactEntreprise,
                                            VilleContactEntreprise,
                                            FonctionContactEntreprise,
                                            TelephoneContactEntreprise
					)
					VALUES(
                                            :id,
                                            :entreprise,
                                            :ad1,
                                            :ad2,
                                            :cp,
                                            :ville,
                                            :fonction,
                                            :tel
					)";

            $sql->beginTransaction();
            try
            {
                $c = $sql->prepare($query);

                $c->bindParam(':id', $IdUtilisateur, PDO::PARAM_INT);
                $c->bindParam(':entreprise', $this->IdEntreprise, PDO::PARAM_INT);
                $c->bindParam(':cp', $this->CP, PDO::PARAM_INT);

                $c->bindParam(':ad1', $this->Adresse1, PDO::PARAM_STR);
                $c->bindParam(':ad2', $this->Adresse2, PDO::PARAM_STR);
                $c->bindParam(':ville', $this->Ville, PDO::PARAM_STR);
                $c->bindParam(":tel", $this->Phone, PDO::PARAM_STR);
                $c->bindParam(':fonction', $this->Fonction, PDO::PARAM_STR);

                if ($c->execute())
                {
                    $sql->commit();
                    $c->closeCursor();
                    $this->requeteOk = true;
                    $this->errormsg = "";
                }
                else
                {
                    $this->requeteOk = false;
                    $this->errormsg = $c->errorInfo();
                    $sql->rollback();
                    $c->closeCursor();
                    $this->Id = 0;
                }
            }
            catch (PDOException $Exception)
            {
                $this->requeteOk = false;
                $this->errormsg = $c->errorInfo();
                $sql->rollback();
                $c->closeCursor();
                $this->Id = 0;
            }
        }
        else
        {
            $this->requeteOk = false;
            $this->errormsg = $this->errormsg;
        }
    }

    /**
     * Met à jour un ContactEntreprise dans la base
     */
    public function update()
    {
        parent::updateUtilisateur();
        if ($this->requeteOk === true)
        {
            $sql = SQL::getInstance()->getConnection();
            $query = "UPDATE ContactEntreprise SET
						IdEntreprise = :entreprise,
						Adresse1ContactEntreprise = :ad1,
						Adresse2ContactEntreprise = :ad2,
						CPContactEntreprise = :cp,
						VilleContactEntreprise = :ville,
						FonctionContactEntreprise = :fonction,
                                                TelephoneContactEntreprise = :tel
					WHERE idContactEntreprise = :id";
            $sql->beginTransaction();
            try
            {
                $c = $sql->prepare($query);

                $c->bindParam(':id', $this->Id, PDO::PARAM_INT);
                $c->bindParam(':entreprise', $this->IdEntreprise, PDO::PARAM_INT);
                $c->bindParam(':cp', $this->CP, PDO::PARAM_INT);

                $c->bindParam(':ad1', $this->Adresse1, PDO::PARAM_STR);
                $c->bindParam(':ad2', $this->Adresse2, PDO::PARAM_STR);
                $c->bindParam(':ville', $this->Ville, PDO::PARAM_STR);
                $c->bindParam(':fonction', $this->Fonction, PDO::PARAM_STR);
                $c->bindParam(":tel", $this->Phone, PDO::PARAM_STR);

                if ($c->execute())
                {
                    $sql->commit();
                    $c->closeCursor();
                    $this->requeteOk = true;
                    $this->errormsg = "";
                }
                else
                {
                    $this->requeteOk = false;
                    $this->errormsg = $c->errorInfo();
                    $sql->rollback();
                    $c->closeCursor();
                }
            }
            catch (PDOException $Exception)
            {
                $this->requeteOk = false;
                $this->errormsg = $c->errorInfo();
                $sql->rollback();
                $c->closeCursor();
            }
        }
        else
        {
            $this->requeteOk = false;
            $this->errormsg = $this->errormsg;
        }
    }

    /**
     *
     * @param string $nomM
     * @return string
     */
    public function setAdresse1($nomM)
    {
        $errTab = array("boolOk" => true, "errmsg" => "");
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        if (isset($nomM) && $nomM != "" && strlen($nomM) < 255)
        {
            $this->Adresse1 = htmlentities($nomM);
            $this->errormsg = "";
        }
        else
        {
            if (isset($nomM) && strlen($nomM) > 255)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "L'adresse doit Ãªtre compris entre 1 et 255 caractÃ¨res !";
            }

            $this->Adresse1 = "";
        }
        return $errTab;
    }

    /**
     *
     * @return string
     */
    public function getAdresse1()
    {
        return stripslashes($this->Adresse1);
    }

    /**
     *
     * @param string $nomM
     * @return mixed
     */
    public function setAdresse2($nomM)
    {
        $errTab = array("boolOk" => true, "errmsg" => "");
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        if (isset($nomM) && strlen($nomM) < 255)
        {
            $this->Adresse2 = htmlentities($nomM);
            $this->errormsg = "";
        }
        else
        {
            if (isset($nomM) && strlen($nomM) > 255)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "L'adresse complÃ©mentaire doit Ãªtre compris entre 0 et 255 caractÃ¨res !";
            }
            $this->Adresse2 = "";
        }
        return $errTab;
    }

    /**
     *
     * @return string
     */
    public function getAdresse2()
    {
        return stripslashes($this->Adresse2);
    }

    /**
     *
     * @param int $nomM
     * @return mixed
     */
    public function setCP($nomM)
    {
        $errTab = array("boolOk" => true, "errmsg" => "");
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        if (isset($nomM) && $nomM != "" && strlen($nomM) < 6)
        {
            $this->CP = htmlentities($nomM);
            $this->errormsg = "";
        }
        else
        {
            if (isset($nomM) && strlen($nomM) > 6)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "Le code postal doit Ãªtre compris entre 1 et 5 caractÃ¨res !";
            }
            $this->CP = "";
        }
        return $errTab;
    }

    /**
     *
     * @return int
     */
    public function getCP()
    {
        if (!empty($this->CP) && strlen($this->CP) == 4)
            $this->CP = "0" . $this->CP;
        elseif(empty($this->CP))
            $this->CP = "";
        return $this->CP;
    }

    /**
     *
     * @param string $nomM
     * @return mixed
     */
    public function setVille($nomM)
    {
        $errTab = array("boolOk" => true, "errmsg" => "");
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        if (isset($nomM) && $nomM != "" && strlen($nomM) < 200)
        {
            $this->Ville = htmlentities($nomM);
            $this->errormsg = "";
        }
        else
        {
            if (isset($nomM) && strlen($nomM) > 200)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "La ville doit Ãªtre compris entre 1 et 200 caractÃ¨res !";
            }
            $this->Ville = "";
        }
        return $errTab;
    }

    /**
     *
     * @return string
     */
    public function getVille()
    {
        return stripslashes($this->Ville);
    }

    /**
     *
     * @param string $nomM
     * @return mixed
     */
    public function setFonction($nomM)
    {
        $errTab = array("boolOk" => true, "errmsg" => "");
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        if (isset($nomM) && $nomM != "" && strlen($nomM) < 255)
        {
            $this->Fonction = htmlentities($nomM);
            $this->errormsg = "";
        }
        else
        {
            if (isset($nomM) && strlen($nomM) > 255)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "La ville doit Ãªtre compris entre 1 et 255 caractÃ¨res !";
            }
            $this->Fonction = "";
        }
        return $errTab;
    }

    /**
     *
     * @return string
     */
    public function getFonction()
    {
        return stripslashes($this->Fonction);
    }

    /**
     *
     * @param int $value
     * @return mixed
     */
    public function setIdEntreprise($value)
    {
        $errTab = array("boolOk" => true, "errmsg" => "");
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        if (isset($value) && !empty($value))
        {
            $this->IdEntreprise = $value;
            $this->errormsg = "";
        }
        else
        {
            if (isset($value) && strlen($value) > 11)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "L'id doit Ãªtre compris entre 1 et 11 caractÃ¨res !";
            }
            $this->IdEntreprise = 0;
        }
        return $errTab;
    }

    /**
     *
     * @return int
     */
    public function getIdEntreprise()
    {
        return $this->IdEntreprise;
    }

    /**
     *
     * @param string $value
     * @return mixed
     */
    public function setTelephoneContactEntreprise($value)
    {
        $errTab = array("boolOk" => true, "errmsg" => "");
        //Verif Type + verif Nulle, si bon mis a jour, sinon message erreur
        if (isset($value) && !empty($value) && strlen($value) < 255)
        {
            $this->Phone = htmlentities($value);
            $this->errormsg = "";
        }
        else
        {
            if (isset($value) && strlen($value) > 255)
            {
                $errTab["boolOk"] = false;
                $errTab["errmsg"] = "Le numero doit etre inferieur à 255 caracteres !";
            }
            $this->Phone = 0;
        }
        return $errTab;
    }

    /**
     *
     * @return string
     */
    public function getTelephoneContactEntreprise()
    {
        return $this->Phone;
    }

    /**
     * @static
     * @param int $limit nombre de resultats voulus
     * @param int $begin nombre à partir du quel vous souhaitez commencer
     * @param string $name nom d'un Contact
     * @param int $ent Identifiant de l'entreprise
     * @return mixed Array d'utilisateur
     */
    static public function getList($limit=0, $begin=0, $name="", $ent=0)
    {
        if (empty($limit))
        {
            $sql = SQL::getInstance()->getConnection();
            $query = 'SELECT Utilisateur.* FROM Utilisateur';
            $c = $sql->query($query);
            $result = $c->fetchAll(PDO::FETCH_OBJ);
            return $result;
        }
        else
        {
            $sql = SQL::getInstance()->getConnection();
            $query = 'SELECT Utilisateur.*, ContactEntreprise.*
                              FROM Utilisateur
                              INNER JOIN ContactEntreprise ON ContactEntreprise.idContactEntreprise = Utilisateur.IdUtilisateur
                              WHERE StatutUtilisateur = "2"';
            if (!empty($name))
            {
                $query .= " AND ( NomUtilisateur LIKE CONCAT('%', :nom, '%')  OR PrenomUtilisateur LIKE CONCAT('%', :prenom, '%') OR EmailUtilisateur LIKE CONCAT('%', :mail, '%'))";
            }
            if (!empty($ent))
                $query .= "AND IdEntreprise = :ent";

            $query .= ' LIMIT :begin,:limit';
            $c = $sql->prepare($query);
            $c->bindParam(':begin', $begin, PDO::PARAM_INT);
            $c->bindParam(':limit', $limit, PDO::PARAM_INT);
            if (!empty($name))
            {
                $c->bindParam(':nom', $name, PDO::PARAM_STR);
                $c->bindParam(':prenom', $name, PDO::PARAM_STR);
                $c->bindParam(':mail', $name, PDO::PARAM_STR);
            }
            //var_dump($name);
            if (!empty($ent))
                $c->bindParam(":ent", $ent, PDO::PARAM_INT);
            if ($c->execute())
            {
                $result = $c->fetchAll(PDO::FETCH_OBJ);
                return $result;
            }
            else
            {
                return array();
            }
        }
    }

    /**
     * @static
     * @param string $name nom d'un Contact
     * @param int $ent Identifiant de l'entreprise
     * @return int nombre de resultat de la recherche
     */
    static public function globalCount($name="", $ent =0)
    {
        $sql = SQL::getInstance()->getConnection();
        $query = 'SELECT COUNT(IdUtilisateur) as count
                      FROM Utilisateur
                      INNER JOIN ContactEntreprise ON ContactEntreprise.idContactEntreprise = Utilisateur.IdUtilisateur
                      WHERE StatutUtilisateur = "2"';
        if (!empty($name))
        {
            $query .= " AND ( NomUtilisateur LIKE CONCAT('%', :nom, '%')  OR PrenomUtilisateur LIKE CONCAT('%', :prenom, '%') OR EmailUtilisateur LIKE CONCAT('%', :mail, '%'))";
        }
        if (!empty($ent))
            $query .= "AND IdEntreprise = :ent";

        $c = $sql->prepare($query);
        if (!empty($name))
        {
            $c->bindParam(':nom', $name, PDO::PARAM_STR);
            $c->bindParam(':prenom', $name, PDO::PARAM_STR);
            $c->bindParam(':mail', $name, PDO::PARAM_STR);
        }
        //var_dump($name);
        if (!empty($ent))
            $c->bindParam(":ent", $ent, PDO::PARAM_INT);
        if ($c->execute())
        {
            $result = $c->fetch(PDO::FETCH_OBJ);
            return $result->count;
        }
        else
        {
            return 0;
        }
    }

}

?>